# 函数
# 将经常需要使用的代码 封装到一起

# a的2次方

a = 2222
print(a ** 2)

# a的3次方
print(a ** 3)


# n的k次方
# print(n ** k)

# def 函数名(参数1, 参数2, 参数3......):
#     print(xxxx)
#     加法
#     打开文件
#     ......


def ciFang(n, k):
    print(n ** k)




# 计算1~n的和
# n由自己输入

# 1~5的和
sum = 0
count = 1
while count <= 5:
    sum = sum + count
    count = count + 1
print(sum)

# 1~10的和
sum = 0
count = 1
while count <= 10:
    sum = sum + count
    count = count + 1
print(sum)

# 1~100的和
sum = 0
count = 1
while count <= 100:
    sum = sum + count
    count = count + 1
print(sum)


def sumN(n):
    sum = 0
    count = 1
    while count <= n:
        sum = sum + count
        count = count + 1
    print(sum)


sumN(5)
sumN(10)
sumN(100)


# n！

# 用循环
def jieCheng(n):
    result = 1
    while n >= 1:
        result = result * n
        n = n - 1
    print(result)


jieCheng(5)


# 递归函数
# 1、自己调用自己
# 2、有停止条件

# 符合我们正常思维习惯
# 递归次数不能太多，尽量避免使用
def jieCheng2(n):
    if n == 1:
        return 1
    return n * jieCheng2(n - 1)


print(jieCheng2(5))
"""
jieCheng2(5) => 5 * jieCheng2(4)
                    4 * jieCheng2(3)
                        3 * jieCheng2(2)
                            2 * jieCheng2(1)
                                1
"""

# 简化的函数
# lambda表达式

# n 的 k次方
# lambda 参数:返回值
func1 = lambda n, k: n ** k
print(func1(2, 3))

# 定义一个main方法
# 程序的入口
# 只有在执行当前模块时才会调用
# 在被其他模块导入时不会被调用
if __name__ == '__main__':
    # 2 的 10次方
    ciFang(2, 10)
    # 4 的 2 次方
    ciFang(4, 2)